_namespace('Common.Util');

Common.Util.showMessager = function (msg) {
	$.messager.show({
		title : '提示',
		msg : msg,
		timeout : 1000,
		showType : 'slide',
		style : {
			right : '',
			bottom : ''
		}
	});
};

/**
 * AJAX请求
 * 
 * @param {String}
 *            url 请求地址
 * @param {String|Object}
 *            data 类型: Object, String 发送到服务器的数据。
 *            将自动转换为请求字符串格式。GET 请求中将附加在 URL 后面。
 *            查看 processData 选项说明，以禁止此自动转换。
 *            对象必须为"{键:值}"格式。如果这个参数是一个数组，
 *            jQuery会按照traditional 参数的值，
 *            将自动转化为一个同名的多值查询字符串(查看下面的说明)。
 *            如 {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'。 
 * @param {Function}
 *            successFn 类型: Function( Object data, String textStatus, jqXHR jqXHR )
 *            请求成功后的回调函数。这个函数传递3个参数：
 *            	data : 从服务器返回的数据，并根据dataType参数进行处理后的数据，
 *            	textStatus : 一个描述状态的字符串;
 *            	jqXHR : (在jQuery 1.4.x前为XMLHttpRequest)对象.
 *            		在jQuery 1.5， 成功设置可以接受一个函数数组。每个函数将被依次调用。这是一个 Ajax Event
 * @param {Function}
 *            erroFn 类型: Function( jqXHR jqXHR, String textStatus, String errorThrown )
 *            请求失败时调用此函数。有以下三个参数：
 *            	jqXHR : (在 jQuery 1.4.x前为XMLHttpRequest)对象,
 *            	textStatus : 描述发生错误类型的一个字符串,
 *            	errorThrown : 捕获的异常对象。
 *            如果发生了错误，错误信息（第二个参数(textStatus)）除了得到null之外，还可能是"timeout", "error", "abort" ，和 "parsererror"。
 *            当一个HTTP错误发生时，errorThrown 接收HTTP状态的文本部分，比如： "Not Found"（没有找到） 或者 "Internal Server Error."（服务器内部错误）。
 *            从jQuery 1.5开始, 在error设置可以接受函数组成的数组。每个函数将被依次调用。
 *            注意：此处理程序在跨域脚本和JSONP形式的请求时不被调用。这是一个 Ajax Event。 
 */
Common.Util.ajax = function(url, data, successFn, erroFn) {
	$.ajax({
		url : url,
		data : data,
		type : 'POST',
		dataType : 'json',
		success : function(data, textStatus, jqXHR) {
			if (successFn && (typeof(successFn) == 'function')) {
				successFn(data, textStatus, jqXHR);
			}
		},
		error : function (XMLHttpRequest, textStatus, errorThrown) {
			if ('parsererror' == textStatus) {
				var responseText = XMLHttpRequest.responseText || '';
				if (XMLHttpRequest.responseText.indexOf('<!DOCTYPE') >= 0) {
					top.location.href = 'index';
				}
			} else if (erroFn && (typeof(erroFn) == 'function')) {
				erroFn(XMLHttpRequest, textStatus, errorThrown);
			}
		}
	});
};

/**
 * 带有提示信息的AJAX请求
 * 
 * @param {String}
 *            url 请求地址
 * @param {String|Object}
 *            data 类型: Object, String 发送到服务器的数据。
 *            将自动转换为请求字符串格式。GET 请求中将附加在 URL 后面。
 *            查看 processData 选项说明，以禁止此自动转换。
 *            对象必须为"{键:值}"格式。如果这个参数是一个数组，
 *            jQuery会按照traditional 参数的值，
 *            将自动转化为一个同名的多值查询字符串(查看下面的说明)。
 *            如 {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'。 
 * @param {Function}
 *            successFn 类型: Function( Object data, String textStatus, jqXHR jqXHR )
 *            请求成功后的回调函数。这个函数传递3个参数：
 *            	data : 从服务器返回的数据，并根据dataType参数进行处理后的数据，
 *            	textStatus : 一个描述状态的字符串;
 *            	jqXHR : (在jQuery 1.4.x前为XMLHttpRequest)对象.
 *            		在jQuery 1.5， 成功设置可以接受一个函数数组。每个函数将被依次调用。这是一个 Ajax Event
 * @param {Function}
 *            erroFn 类型: Function( jqXHR jqXHR, String textStatus, String errorThrown )
 *            请求失败时调用此函数。有以下三个参数：
 *            	jqXHR : (在 jQuery 1.4.x前为XMLHttpRequest)对象,
 *            	textStatus : 描述发生错误类型的一个字符串,
 *            	errorThrown : 捕获的异常对象。
 *            如果发生了错误，错误信息（第二个参数(textStatus)）除了得到null之外，还可能是"timeout", "error", "abort" ，和 "parsererror"。
 *            当一个HTTP错误发生时，errorThrown 接收HTTP状态的文本部分，比如： "Not Found"（没有找到） 或者 "Internal Server Error."（服务器内部错误）。
 *            从jQuery 1.5开始, 在error设置可以接受函数组成的数组。每个函数将被依次调用。
 *            注意：此处理程序在跨域脚本和JSONP形式的请求时不被调用。这是一个 Ajax Event。 
 */
Common.Util.progressAjax = function(url, data, successFn, erroFn) {
	$.messager.progress({
		title : '提示',
		msg : '正在处理请稍后... ...'
	});
	function _sucFn (data, textStatus, jqXHR) {
		$.messager.progress('close');
		if (successFn && (typeof(successFn) == 'function')) {
			successFn(data, textStatus, jqXHR);
		}
	}
	function _errFn (XMLHttpRequest, textStatus, errorThrown) {
		$.messager.progress('close');
		if (erroFn && (typeof(erroFn) == 'function')) {
			erroFn(XMLHttpRequest, textStatus, errorThrown);
		}
	}
	Common.Util.ajax(url, data, _sucFn, _errFn);
};

/**
 * 表单提交
 * 
 * @param {String}
 *            fromId 提交表单的id
 * @param {String}
 *            url 请求地址
 * @param {Function}
 *            successFn 类型: Function( Object data, String textStatus, jqXHR jqXHR )
 *            请求成功后的回调函数。这个函数传递3个参数：
 *            	data : 从服务器返回的数据，并根据dataType参数进行处理后的数据，
 *            	textStatus : 一个描述状态的字符串;
 *            	jqXHR : (在jQuery 1.4.x前为XMLHttpRequest)对象.
 *            		在jQuery 1.5， 成功设置可以接受一个函数数组。每个函数将被依次调用。这是一个 Ajax Event
 * @param {Function}
 *            erroFn 类型: Function( jqXHR jqXHR, String textStatus, String errorThrown )
 *            请求失败时调用此函数。有以下三个参数：
 *            	jqXHR : (在 jQuery 1.4.x前为XMLHttpRequest)对象,
 *            	textStatus : 描述发生错误类型的一个字符串,
 *            	errorThrown : 捕获的异常对象。
 *            如果发生了错误，错误信息（第二个参数(textStatus)）除了得到null之外，还可能是"timeout", "error", "abort" ，和 "parsererror"。
 *            当一个HTTP错误发生时，errorThrown 接收HTTP状态的文本部分，比如： "Not Found"（没有找到） 或者 "Internal Server Error."（服务器内部错误）。
 *            从jQuery 1.5开始, 在error设置可以接受函数组成的数组。每个函数将被依次调用。
 *            注意：此处理程序在跨域脚本和JSONP形式的请求时不被调用。这是一个 Ajax Event。 
 */
Common.Util.submitForm = function (fromId, url, successFn, erroFn) {
	var isValid = $('#' + fromId).form('validate');
	if (isValid){
		var data = $('#' + fromId).serialize();
		Common.Util.progressAjax(url, data, successFn, erroFn);
	}
};

/**
 * 将数据列表中选择的单个或多个数据id发送到后台并返回执行结果
 * 
 * @param {String}
 *            datagrid 数据列表的id
 * @param {String}
 *            url 请求地址
 * @param {Function}
 *            successFn 类型: Function( Object data, String textStatus, jqXHR jqXHR )
 *            请求成功后的回调函数。这个函数传递3个参数：
 *            	data : 从服务器返回的数据，并根据dataType参数进行处理后的数据，
 *            	textStatus : 一个描述状态的字符串;
 *            	jqXHR : (在jQuery 1.4.x前为XMLHttpRequest)对象.
 *            		在jQuery 1.5， 成功设置可以接受一个函数数组。每个函数将被依次调用。这是一个 Ajax Event
 * @param {Function}
 *            erroFn 类型: Function( jqXHR jqXHR, String textStatus, String errorThrown )
 *            请求失败时调用此函数。有以下三个参数：
 *            	jqXHR : (在 jQuery 1.4.x前为XMLHttpRequest)对象,
 *            	textStatus : 描述发生错误类型的一个字符串,
 *            	errorThrown : 捕获的异常对象。
 *            如果发生了错误，错误信息（第二个参数(textStatus)）除了得到null之外，还可能是"timeout", "error", "abort" ，和 "parsererror"。
 *            当一个HTTP错误发生时，errorThrown 接收HTTP状态的文本部分，比如： "Not Found"（没有找到） 或者 "Internal Server Error."（服务器内部错误）。
 *            从jQuery 1.5开始, 在error设置可以接受函数组成的数组。每个函数将被依次调用。
 *            注意：此处理程序在跨域脚本和JSONP形式的请求时不被调用。这是一个 Ajax Event。 
 * @param {String}
 *            mark 后台接收参数,若不传此参赛默认为ids.接收参数要定义为一个数组
 */
Common.Util.sendGridDataIds = function (datagrid, url, successFn, erroFn, mark) {
	var data = "";
	var selections = $('#' + datagrid).datagrid('getSelections');
	if (selections.length > 0) { // 判断是否选择数据,选择了数据则遍历所有数据获得Id
		if (mark) {
			mark = "&" + mark + "=";
		} else {
			mark = "&ids=";
		}
		for (var index in selections) {
			data += mark + selections[index].id;
		}
	} else { // 未选择数据跳出方法
		Common.Util.showMessager("未选择任何数据!");
		return;
	}
	$.messager.confirm('确认对话框', '您确定要继续吗？', function (r){
		// 判断用户选择情况,取消则退出当前方法
		if (!r) { return; }
		// 发送ajax请求
		Common.Util.progressAjax(url, data, successFn, erroFn);
	});
};

/**
 * 处理行内容太张时自动省略，鼠标移动上去显示内容
 * 
 * @param {String} value
 * @param {Object} rowData
 * @param {Number} index
 * @return {String}
 */
Common.Util.TextFormatter = function (value, rowData, index) {
	return value && '<span title="' + value+ '">' + value + '</span>';
};
